==標題更新
為自己的轉職設了一個簡單的deadline,想看看自學這樣一年可以學到什麼程度,更重要的是這樣寫看起來比較俐落!
這樣算不算是一種重構呢(?
==今天的課題
課本:https://reurl.cc/ROvEv6
练习3:设计一个函数返回给定文件名的后缀名。
後綴名在餵狗之後知道是副檔名的意思(英文extension),也就是說今天要
1.設計一個函數,也就是有def與return
2.函數的功能可以讓使用者輸入文件名,並且return出文件的副檔名
所以核心的功能應該是動用系統的功能來查詢一遍並且找到符合使用者輸入的名稱,雖然不確定有沒有這種模組,但總覺得import os應該不會讓我失望
==先去上班
一陣尋找之後發現了os.listdir與fnmatch這兩個好東西
前者的功能是可以幫我列出任意範圍內的所有檔案名稱
而後者則是幫我比對輸入的檔名
把兩者用for迴圈結合之後我就得到了一個能夠找出檔案的程式碼
import os
import fnmatch
for file in os.listdir("/Users/mac/Desktop"):
if fnmatch.fnmatch(file,'動動.gif'):
print(file)
不過這時有兩個問題
1.要輸入完整檔名才能得到完整檔名(?)
2.沒有input的地方
我想到上次可以改進的:沒有用def跟預設值寫、沒有盡量使用變數來增加程式碼的靈活度
還有從練習中學到的:佔位符可以用在任何字串中
重構之後
import fnmatch
import os
def find_name(path=input("請輸入您要查詢的資料夾路徑")):
file_name=input('請輸入欲查找的文件名')
if path =='':
print('以預設資料夾Desktop進行查詢')
path=('/Users/mac/Desktop')
for file in os.listdir(path):
if fnmatch.fnmatch(file,'%s.*'%(file_name)):
print(f"{file_name}的副檔名為{file[-4:]}")
find_name()
大功告成~~執行看看
接下來是對答案時間
def get_suffix(filename, has_dot=False):
"""
获取文件名的后缀名
:param filename: 文件名
:param has_dot: 返回的后缀名是否需要带点
:return: 文件的后缀名
"""
pos = filename.rfind('.')
if 0 < pos < len(filename) - 1:
index = pos if has_dot else pos + 1
return filename[index:]
else:
return ''
瞬間有種想留言「說明不正確,害我的老二卡進吊扇裡」的衝動...
忙了我一天,原來題目只是想要一個字面上的「input全名,return副檔名」功能
(是說這功能可以幹嘛)
不過也因此學到了很多好東西~不算壞事啦
今天extra學到的小芝士:
mac對文件按右鍵以後再按alt(option)鍵後,原本的copy會變成copy path
今天的心得:
1.雖然說看錯題目讓我原本可以加快進度的機會沒了,但也因此學到了不錯的東西
2.事先把藍圖畫好可以減少很多空想或鑽牛角尖的時間
3.下次打了一長串文章後,決定發表之前記得先複製起來..........QQ